查看原文
其他

如何调试xxProtect

xiaofu 看雪学院 2019-05-25

0x1:


今天终于拿到了萌妹以求的xxprotect的demo,






好久没搞反调试这一块了。心痒痒,开搞。





0x2:


 打开demo,长这样。




是个64的程序,直接上x64dbg ,发现竟然找不到进程.尝试直接OpenProcess,报错 STATUS_INVALID_CID。




根据msdn描述,很清楚了。




做个实验测试一下。




系统根据cid拿不到eprocess信息,看看PsLookupProcessByProcessId的实现。




可以考虑自己维护下这个东西cid->cidtableentry。



0x3:




hook一下PspReferenceCidTableEntry。




在进程创建的时候调用下ProcessStart加入当前的table.结束的时候调用下ProcessDelete移除掉table。


然后跑起来发现有点问题。在进程退出的时候,系统会GG掉。


那只能换个办法了,hook PsLookupProcessByProcessId。



0x4:


代码稍微改一下,写一个维护类。




然后进程创建/结束的逻辑一样,不过table变成eprocess了。




加载hook。




一波操作后,我们就可以让调试器OpenProcess这个demo了。



0x5:


x64dbg虽然能打开进程句柄了,但是还是不能附加调试。在DebugActiveProcess的时候失败了。


稍微跟进去看看,发现问题出在了DebugActiveProcess的DbgUiDebugActiveProcess的DbgUiIssueRemoteBreakin创建附加线程上。




创建线程失败,导致x64dbg直接脱离调试状态。其实说到底这个线程要不要都可以,我们直接把这里PATCH掉。再附加。 嗯?直接可以调试了?


MessageBox下个断点试试,也能正常触发。




下个硬件断点试试。




好吧。这就完事了。



0x6:


1.hook PsLookupProcessByProcessId.自己维护eprocess和cid的关系。


2.去掉DebugActiveProcess的DbgUiDebugActiveProcess的DbgUiIssueRemoteBreakin  。




- End -


看雪ID:xiaofu                    

https://bbs.pediy.com/user-99882.htm


本文由看雪论坛 xiaofu 原创

转载请注明来自看雪社区


长按识别下方图中的二维码,为Ta投票!今晚23:59截止!




热门图书推荐:

立即购买!



热门技术文章:        





公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com



点击下方“阅读原文”

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存